/*
 * Cerdito.h
 *
 *  Created on: 16/10/2012
 *      Author: Ignacio Galvez
 */

#ifndef CERDITO_H_
#define CERDITO_H_

#include "Daniable.h"
#include <list>
class Huevo;

/*Hay un Cerdito por jugador y de ser destruido
 * el jugador pierde la partida
 * tiene una posicion en el escenario y una determinada
 * cantidad de vida*/
class Cerdito: public Daniable {
public:
	Cerdito(int id,double x, double y);
	// devuelve los huevos del siguiente disparo
	std::list<Huevo*> disparar();
	/* valida si se realiza el disparo o no
	 *  y en caso de que si setea el valor
	 *  que indica si puede realizarse el disparo
	 */
	void disparar(double posicionXfinal, double posicionYfinal);
	/*verifica queva a realizarse
	 * un disparo
	 */
	bool dispara();
	void serDaniadoPorPajaroRojo();
	void serDaniadoPorPajaroVerde();
	void serDaniadoPorPajaroAzul();
	void serDaniadoPorHuevoBlanco();
	void serDaniadoPorHuevoCodorniz();
	void serDaniadoPorHuevoPoche();
	void serDaniadoPorHuevoReloj();
	void recibirExplosionHuevoBlanco();
	double getPosicionX();
	double getPosicionY();
	void setPosicionX(double x);
	void setPosicionY(double y);
	std::string &getImagePath();
	void setImagePath(std::string &path);
	virtual ~Cerdito();
	static void incrementarTiempoActual();
private:
	int id;
	std::list<Huevo*> huevos;
	double posicionX;
	double posicionY;
	double posicionXfinal;
	double posicionYfinal;
	int puntaje;
	bool disparo;
	std::string imagePath;
	/* genera el siguiente huevo a disparar
	 * cuyo objetivo esta en el punto  x,y
	 */
	void  generarHuevoBlanco();
	void  generarHuevosCodorniz();
	void  generarHuevoPoche();
	void  generarHuevoReloj(double timeout);
	// si el disparo es vertical u horizontal no se efectua
	bool puedeDisparar(double x, double y);
	double calcularAnguloDeTiro(double x, double y);
	double calcularAnguloDeTiro(double x, double y, double factor);
	double calcularVelocidadInicial(double anguloDeTiro, double x, double y);
	static double VIDA_CERDITO;
	static double DANIO_HUEVO_POCHE;
	static double DANIO_HUEVO_RELOJ;
	static double EXPLOSION_HUEVO_BLANCO;
	static double DANIO_PAJARO_ROJO;
	static double DANIO_PAJARO_VERDE;
	static double DANIO_PAJARO_AZUL;
	static double tiempoActual;
	friend class CerditoTest;
};


#endif /* CERDITO_H_ */
